package com.cw.base.jeeyc.common.dispatch.task.facade.pojo.request;

import java.io.Serializable;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import com.cw.base.jeeyc.common.dispatch.task.facade.condition.LoopCondition;
import com.cw.base.common.model.dto.base.BaseReqDto;
import com.cw.base.common.model.dto.base.BaseUserReqDto;

import lombok.Data;

/**
 * 映射到 {@link TaskRequest}
 * 在spring容器下，根据targetClass对应的bean去执行targetMethod
 *
 * @author shenly@yunrong.cn
 * @version V2.1
 * @since 2.1.0 2019/3/14 15:00
 */
@Data
public class MethodTaskRequest implements Serializable {
    /** 公共变量 */
    @Valid
    @NotNull(message = "基本的变量为空！")
    private BaseReqDto request;
    /** 公共变量 */
    private BaseUserReqDto baseUserReqDto;
    /** 循环结果判断条件 */
    private LoopCondition loopCondition;

    /** 执行类 */
    @NotBlank(message = "执行类为空！")
    private String targetClass;
    /** 执行方法 */
    @NotBlank(message = "目标方法为空！")
    private String targetMethod;
    /** 执行方法入参 */
    private Object[] parameters;

    /** 执行正常回调类 **/
    private String taskCallBackClass;
    /** 执行正常回调方法 **/
    private String taskCallBackMethod = "callBack";
    /** 执行错误回调类 **/
    private String errorTaskCallBackClass;
    /** 执行错误回调方法 **/
    private String errorTaskCallBackMethod = "errorCallBack";

    /** 如果为true 则 失败继续往队列里插入，如果为false 则调用 回调接口 */
    private boolean errorLoop = true;

    /** 最多执行次数 **/
    private int execNum;
    /** 首次间隔时间 **/
    private long delayExecTime;
    /** 调度间隔时间 **/
    private long apartExecTime;

    /** 业务变量 */
    private Object[] businessParam;
}
